Skip to main content

Top K Frequent Elements

Question​

Two bar problem​

find best area among ....

""" Given an integer array "nums" and an integer "k", return the "k" most frequent elements. You may return the answer in any order.


Example 1:

Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2]


Example 2:

Input: nums = [1], k = 1 Output: [1]


Constraints:

1 <= nums.length <= 10^5 -10^4 <= nums[i] <= 10^4 k is in the range [1, the number of unique elements in the array]. It is guaranteed that the answer is unique.

====================================== Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size. """

Solution​

heap/Top K Frequent Elements.py

import heapq
from collections import Counter


def get_most_frequent(arr, k):
h = []
m = Counter(arr)

for n, v in m.items():
heapq.heappush(h, (-1 * v, n))

ret = []
for i in range(k):
v, n = heapq.heappop(h)

ret.append(n)
#print(ret)


return ret


# print(get_most_frequent([1, 1, 1, 2, 2, 3], 2))
result = get_most_frequent([4, 4, 4, 5, 5, 5, 5, 2, 2, 1, 1, 1, 1, 1], 3)


#print(result)
Stepret
1[1, 5, 4]
2[1, 5, 4]
3[1, 5, 4]
result
[1, 5, 4]